/*@author cerimice*/
package Dialogos.Entidad;

import Sistema.Configuracion;
import Persistencia.Definicion.TipoServicio;
import Logica.Dialogo.Entidad.TipoServicioLogica;

import java.util.logging.Logger;

import com.vaadin.ui.Table;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Label;
import com.vaadin.ui.Button;
import com.vaadin.ui.TextField;
import com.vaadin.data.Property;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.Notification;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.ui.HorizontalLayout;

public class TipoServicioDlg extends Panel
    {
    private TipoServicioLogica logica;
    
    private Label       label0;
    
    private Table       tabla;
    private TextField   buscar;
    private TextField   clave;
    private TextField   nombre;
    private Button      mostrar;
    private Button      modificar;
    private Button      agregar;
    
    public TipoServicioDlg()
        {
        super();
        iniciarComponente();
        }
    
    private void iniciarComponente()
        {
        logica      = new TipoServicioLogica();
        
        buscar      = new TextField("Proporcione nombre buscar");
        clave       = new TextField("Clave");   clave.setEnabled(false);
        nombre      = new TextField("Nombre");
        mostrar     = new Button("Mostrar");
        modificar   = new Button("Modificar");
        agregar     = new Button("Agregar");
        tabla       = new Table("Listado de TipoServicios");
            tabla.addListener(new Property.ValueChangeListener()    {@Override public void valueChange(ValueChangeEvent event) {cargarInformacionSeleccionado();}});
            tabla.setNullSelectionAllowed(false);
            tabla.setSelectable(true);
            tabla.setImmediate(true);
            tabla.addContainerProperty("Clave",String.class,"");
            tabla.addContainerProperty("Nombre",String.class,"");
            tabla.setColumnWidth("Clave",100);
            tabla.setColumnWidth("Nombre",200);
            tabla.setWidth("300px");
        
        mostrar.addListener(new Button.ClickListener()  {@Override public void buttonClick(Button.ClickEvent event){cargarTabla();}});
        agregar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){agregarInformacion();}});
        modificar.addListener(new Button.ClickListener(){@Override public void buttonClick(Button.ClickEvent event){modificarInformacionSeleccionado();}});
        
        GridLayout layout = new GridLayout(4,4);
            VerticalLayout busqueda = new VerticalLayout();
                busqueda.addComponent(buscar);
                busqueda.addComponent(mostrar);
            layout.addComponent(busqueda,0,0,3,1);
            layout.addComponent(tabla,0,2,1,3);
            VerticalLayout componentes = new VerticalLayout();
                componentes.setCaption("Detalles de selección");
                componentes.addComponent(clave);
                componentes.addComponent(nombre);
                HorizontalLayout operaciones = new HorizontalLayout();
                    operaciones.addComponent(modificar);
                    operaciones.addComponent(agregar);
                componentes.addComponent(operaciones);
            layout.addComponent(componentes,2,2,3,3);
        this.addComponent(layout);
        this.setCaption("CATALOGO DE "+logica.getTitulo().toUpperCase());
        this.setIcon(new ThemeResource("icons/personal/marca.png"));
        
        cargarTabla();
        }
    
    private void cargarTabla()
        {
        try
            {this.tabla = logica.generarTabla(buscar.getValue().toString(),this.tabla);}
        catch (Exception ex)
            {
            /*getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>"+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);*/
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),ex.getMessage());
            }
        }
    
    private void cargarInformacionSeleccionado()
        {
        agregar.setEnabled(false);
        String clv = tabla.getValue().toString();
        try
            {
            TipoServicio obj = logica.obtenerObjeto(clv);
            clave.setValue(obj.getClave());
            nombre.setValue(obj.getNombre());
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    
    private void modificarInformacionSeleccionado()
        {
        if(tabla.getValue()==null){{getWindow().showNotification("Aviso...","Por favor selecciona un elemento de la tabla",Notification.TYPE_WARNING_MESSAGE);} return;}
        String clv = tabla.getValue().toString();
        try
            {
            String claveDts = clave.getValue().toString();
            String nombreDts = nombre.getValue().toString();
            if(logica.modificarObjeto(claveDts,nombreDts))
                {
                clave.setValue("");
                nombre.setValue("");
                getWindow().showNotification("Modificación...","Información procesada correctamente",Notification.TYPE_TRAY_NOTIFICATION);
                cargarTabla(); cargarTabla();
                }
            else
                {getWindow().showNotification("Modificación...",logica.getError(),Notification.TYPE_WARNING_MESSAGE);}
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    
    private void agregarInformacion()
        {
        try
            {
            String nombreDts = nombre.getValue().toString();
            if(logica.agregarObjeto(nombreDts))
                {
                clave.setValue("");
                nombre.setValue("");
                getWindow().showNotification("Agregar...","Información procesada correctamente",Notification.TYPE_TRAY_NOTIFICATION);
                cargarTabla(); cargarTabla();
                }
            else
                {getWindow().showNotification("Agregar...",logica.getError(),Notification.TYPE_WARNING_MESSAGE);}
            }
        catch (Exception ex)
            {getWindow().showNotification("Problemas...","Error al procesar la información, por favor intentelo nuevamente<br>Mensaje: "+ex.getMessage(),Notification.TYPE_ERROR_MESSAGE);}
        }
    }
